/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * PanelDibujo.java
 *
 * Created on 12-02-2012, 06:51:12 PM
 */
package Estructura;

import Estructura.Ordenamientos;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;


/**
 *
 * @author Roberto A Pinto S
 */
public class PanelDibujo extends javax.swing.JPanel implements Observer {

    private static Logger logger = Logger.getLogger(PanelDibujo.class);
    private Ordenamientos obj;
    private Thread hilo1;
    public void Insercion()
    {
        logger.info("Llama al metodo Insercion");
        this.obj.Insercion(obj.getArreglo());
    }

    public void QuickSort()
    {
        logger.info("Llama al metodo QuickSort");
        this.obj.quiksort(obj.getArreglo(), 1, 299);
    }
    
    public void Seleccion(){
        logger.info("Llama al metodo Seleccion");
        this.obj.Seleccion(obj.getArreglo());
    }
            
    
    /** Creates new form PanelDibujo */
    public PanelDibujo() {
        logger.info("Ingresa al Constructor de PanelDibujo");
        obj = new Ordenamientos(300);
        initComponents();
    }

    public Ordenamientos getObj() {
        return obj;
    }

    public void setObj(Ordenamientos obj) {
        this.obj = obj;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    @Override
    public void paintComponent(Graphics gc) {
        super.paintComponent(gc);
        gc.setColor(Color.BLACK);

        int y = 0;
        for (int i : obj.getArreglo()) {
            gc.drawLine(0, y, i, y);
                        
            y = y + 2;
            //logger.info("Pinta el arreglo desordenado");
        }

    }

    public void pintadoquicksort(Graphics gc) {
        logger.info("Pinta el ordenamiento con el metodo QuickSort");
        super.paintComponent(gc);
        gc.setColor(Color.BLACK);
        
        //obj = new Ordenamientos(100);
        obj.quiksort(obj.getArreglo(), 1, 299);
                      
        int y = 0;
        for (int i : obj.getArreglo()) {
            gc.drawLine(0, y, i, y);
           // Thread.sleep(10);
            y = y + 2;
        }
    }
    
    @SuppressWarnings("NotifyWhileNotSynced")
    public void pintadoinsercion(Graphics gc) {
        logger.info("Pinta el ordenamiento con el metodo Insercion");

        super.paintComponent(gc);
        gc.setColor(Color.BLACK);

        //obj = new Ordenamientos(100);
        obj.Insercion(obj.getArreglo());
        
        int y = 0;
        for (int i : obj.getArreglo()) {
            
            gc.drawLine(0, y, i, y);
            /**try {
                Thread.sleep(10);
            } catch (InterruptedException ex) {
                java.util.logging.Logger.getLogger(PanelDibujo.class.getName()).log(Level.SEVERE, null, ex);
            }
            //this.notifyAll();*/
            y = y + 2;
        }
    }
    
    public void pintadoseleccion(Graphics gc) {
        logger.info("Pinta el ordenamiento con el metodo Seleccion");

        super.paintComponent(gc);
        gc.setColor(Color.BLACK);

        //obj = new Ordenamientos(100);
        obj.Seleccion(obj.getArreglo());
        
        int y = 0;
        for (int i : obj.getArreglo()) {
            gc.drawLine(0, y, i, y);
            y = y + 2;
        }
    }

    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents
    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables

    @Override
    public void update(Observable o, Object arg) {
        obj = (Ordenamientos) o;
        this.repaint();

    }
    
}
